YES 1.157
H-Termination proof of /home/matraf/haskell/eval_FullyBlown_Fast/List.hs
H-Termination of the given Haskell-Program with start terms could successfully be proven:
↳ HASKELL
↳ BR
mainModule List
| ((isSuffixOf :: [()] -> [()] -> Bool) :: [()] -> [()] -> Bool) |
module List where
| import qualified Maybe import qualified Prelude
|
| isPrefixOf :: Eq a => [a] -> [a] -> Bool
isPrefixOf | [] _ | = | True |
isPrefixOf | _ [] | = | False |
isPrefixOf | (x : xs) (y : ys) | = | x == y && isPrefixOf xs ys |
|
| isSuffixOf :: Eq a => [a] -> [a] -> Bool
isSuffixOf | x y | = | reverse x `isPrefixOf` reverse y |
|
module Maybe where
| import qualified List import qualified Prelude
|
Replaced joker patterns by fresh variables and removed binding patterns.
↳ HASKELL
↳ BR
↳ HASKELL
↳ COR
mainModule List
| ((isSuffixOf :: [()] -> [()] -> Bool) :: [()] -> [()] -> Bool) |
module List where
| import qualified Maybe import qualified Prelude
|
| isPrefixOf :: Eq a => [a] -> [a] -> Bool
isPrefixOf | [] vw | = | True |
isPrefixOf | vx [] | = | False |
isPrefixOf | (x : xs) (y : ys) | = | x == y && isPrefixOf xs ys |
|
| isSuffixOf :: Eq a => [a] -> [a] -> Bool
isSuffixOf | x y | = | reverse x `isPrefixOf` reverse y |
|
module Maybe where
| import qualified List import qualified Prelude
|
Cond Reductions:
The following Function with conditions
is transformed to
undefined0 | True | = undefined |
undefined1 | | = undefined0 False |
↳ HASKELL
↳ BR
↳ HASKELL
↳ COR
↳ HASKELL
↳ Narrow
mainModule List
| (isSuffixOf :: [()] -> [()] -> Bool) |
module List where
| import qualified Maybe import qualified Prelude
|
| isPrefixOf :: Eq a => [a] -> [a] -> Bool
isPrefixOf | [] vw | = | True |
isPrefixOf | vx [] | = | False |
isPrefixOf | (x : xs) (y : ys) | = | x == y && isPrefixOf xs ys |
|
| isSuffixOf :: Eq a => [a] -> [a] -> Bool
isSuffixOf | x y | = | reverse x `isPrefixOf` reverse y |
|
module Maybe where
| import qualified List import qualified Prelude
|
Haskell To QDPs
↳ HASKELL
↳ BR
↳ HASKELL
↳ COR
↳ HASKELL
↳ Narrow
↳ AND
↳ QDP
↳ QDPSizeChangeProof
↳ QDP
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
new_asAs(True, :(wu250, wu251), :(wu260, wu261), ba) → new_asAs(new_esEs(wu250, wu260, ba), wu251, wu261, ba)
The TRS R consists of the following rules:
new_esEs(wu250, wu260, ty_Char) → new_esEs7(wu250, wu260)
new_esEs11(wu16, wu190, dc, dd) → error([])
new_esEs(wu250, wu260, ty_Double) → new_esEs9(wu250, wu260)
new_esEs(wu250, wu260, ty_Integer) → new_esEs4(wu250, wu260)
new_esEs(wu250, wu260, ty_Int) → new_esEs13(wu250, wu260)
new_esEs7(wu16, wu190) → error([])
new_esEs(wu250, wu260, app(ty_Maybe, db)) → new_esEs6(wu250, wu260, db)
new_esEs(wu250, wu260, app(ty_Ratio, cb)) → new_esEs3(wu250, wu260, cb)
new_esEs3(wu16, wu190, bc) → error([])
new_esEs(wu250, wu260, app(app(ty_Either, cf), cg)) → new_esEs12(wu250, wu260, cf, cg)
new_esEs4(wu16, wu190) → error([])
new_esEs6(wu16, wu190, bd) → error([])
new_esEs(wu250, wu260, ty_Float) → new_esEs10(wu250, wu260)
new_esEs8(wu16, wu190, be, bf, bg) → error([])
new_esEs13(wu16, wu190) → error([])
new_esEs(wu250, wu260, ty_Ordering) → new_esEs1(wu250, wu260)
new_esEs(wu250, wu260, app(ty_[], da)) → new_esEs2(wu250, wu260, da)
new_esEs9(wu16, wu190) → error([])
new_esEs(wu250, wu260, app(app(ty_@2, bh), ca)) → new_esEs11(wu250, wu260, bh, ca)
new_esEs(wu250, wu260, ty_@0) → new_esEs5(wu250, wu260)
new_esEs1(wu16, wu190) → error([])
new_esEs12(wu16, wu190, de, df) → error([])
new_esEs5(@0, @0) → True
new_esEs10(wu16, wu190) → error([])
new_esEs2(wu16, wu190, bb) → error([])
new_esEs(wu250, wu260, app(app(app(ty_@3, cc), cd), ce)) → new_esEs8(wu250, wu260, cc, cd, ce)
new_esEs0(wu16, wu190) → error([])
new_esEs(wu250, wu260, ty_Bool) → new_esEs0(wu250, wu260)
The set Q consists of the following terms:
new_esEs(x0, x1, ty_Bool)
new_esEs(x0, x1, app(ty_Ratio, x2))
new_esEs1(x0, x1)
new_esEs6(x0, x1, x2)
new_esEs4(x0, x1)
new_esEs13(x0, x1)
new_esEs9(x0, x1)
new_esEs(x0, x1, ty_Float)
new_esEs(x0, x1, ty_Char)
new_esEs5(@0, @0)
new_esEs11(x0, x1, x2, x3)
new_esEs(x0, x1, ty_Integer)
new_esEs(x0, x1, app(app(app(ty_@3, x2), x3), x4))
new_esEs2(x0, x1, x2)
new_esEs(x0, x1, app(ty_[], x2))
new_esEs12(x0, x1, x2, x3)
new_esEs0(x0, x1)
new_esEs(x0, x1, ty_Ordering)
new_esEs(x0, x1, app(app(ty_@2, x2), x3))
new_esEs10(x0, x1)
new_esEs8(x0, x1, x2, x3, x4)
new_esEs(x0, x1, ty_Int)
new_esEs(x0, x1, ty_Double)
new_esEs3(x0, x1, x2)
new_esEs7(x0, x1)
new_esEs(x0, x1, ty_@0)
new_esEs(x0, x1, app(ty_Maybe, x2))
new_esEs(x0, x1, app(app(ty_Either, x2), x3))
We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs:
- new_asAs(True, :(wu250, wu251), :(wu260, wu261), ba) → new_asAs(new_esEs(wu250, wu260, ba), wu251, wu261, ba)
The graph contains the following edges 2 > 2, 3 > 3, 4 >= 4
↳ HASKELL
↳ BR
↳ HASKELL
↳ COR
↳ HASKELL
↳ Narrow
↳ AND
↳ QDP
↳ QDP
↳ QDPSizeChangeProof
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
new_isPrefixOf(wu16, wu15, wu19, :(wu1810, wu1811), ba) → new_isPrefixOf(wu16, wu15, new_flip(wu19, wu1810, ba), wu1811, ba)
The TRS R consists of the following rules:
new_flip(wu15, wu16, ba) → :(wu16, wu15)
The set Q consists of the following terms:
new_flip(x0, x1, x2)
We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs:
- new_isPrefixOf(wu16, wu15, wu19, :(wu1810, wu1811), ba) → new_isPrefixOf(wu16, wu15, new_flip(wu19, wu1810, ba), wu1811, ba)
The graph contains the following edges 1 >= 1, 2 >= 2, 4 > 4, 5 >= 5
↳ HASKELL
↳ BR
↳ HASKELL
↳ COR
↳ HASKELL
↳ Narrow
↳ AND
↳ QDP
↳ QDP
↳ QDP
↳ QDPSizeChangeProof
Q DP problem:
The TRS P consists of the following rules:
new_isPrefixOf0(wu15, wu16, :(wu170, wu171), wu18, ba) → new_isPrefixOf0(new_flip(wu15, wu16, ba), wu170, wu171, wu18, ba)
The TRS R consists of the following rules:
new_flip(wu15, wu16, ba) → :(wu16, wu15)
The set Q consists of the following terms:
new_flip(x0, x1, x2)
We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs:
- new_isPrefixOf0(wu15, wu16, :(wu170, wu171), wu18, ba) → new_isPrefixOf0(new_flip(wu15, wu16, ba), wu170, wu171, wu18, ba)
The graph contains the following edges 3 > 2, 3 > 3, 4 >= 4, 5 >= 5